Facebook Libra and Blockchain

Facebook全球化数字货币Libra及区块链技术

Facebook Libra and Blockchain

Camellia, in Edinburgh, 2019.12.31-2020.1.1

I actually don’t know if Libra is going to work, but I believe that it’s important to try new things and as long as you’re doing so responsibly.
by Mark Zuckerberg
马克·扎克伯格:“我不确信Libra是否会成功,但我坚信尝试创新并为之努力的伟大!”

或许很多人还在叹息错过了早期投资比特币(Bitcoin)的良机,但这并不是比特币设计的初衷。十多年区块链(Blockchain)技术及其新应用和新产品,经历了从敌意到怀疑、再到被广泛接受的现状,十多年的风浪前行,技术进步的航向始终未变。当前数字化货币的种类不下千余种,但比特币一直独领风骚,以太坊(Ethereum)又开创了区块链技术新应用的大门。区块链技术的竞争是主链之争,谁能充分发挥区块链技术的特点,拓展开发,首先建立本行业、本领域的主链(被普遍应用的产品),无疑将是一下轮技术变革的最大受益者。
2020年Facebook拟推出一种全球化数字货币Libra,并建立配套的金融基础设施,使人们通过一部手机或终端设备,就实现全球交易,降低交易尤其是跨境交易的手续费,便利普通人的生活,促进企业开展全球贸易。2019年6月,Facebook推出了Libra白皮书,同时提供了Libra区块链、LibraBFT共识协议以及Move语言等三项技术文档。Facebook进军区块链,意味着27亿用户将进入加密数字化货币支付体系;3/4的互联网民进军区块链世界;科技巨头的战场从用户留存扩展到金融世界,华尔街的那些事技术码农也能搞定。科技引领发展,科技巨头正在吸引全球资本集中到自己的科技平台,这似乎又与区块链去中心的本质背道而驰?不,只要你是科技的参与者,你是科技的投资者,你就是这个科技平台的一员,全球资本又分布到了全世界人的手中。
新年伊始,Camellia 在此介绍Libra的相关技术,并与比特币、以太坊等进行对比,旨在帮助大家了解区块链技术的应用和发展。区块链技术利用数学和技术解决了信任问题,其特色主要有以下几点:
  • 去中心化的存储方式及点对点的通讯网络:信息不单独记录在一个中心数据库中,而是存储在网络中的多个或所有节点中。
  • 历史数据的加密链接:记录信息的每个区块以指针的方式,通过HASH函数,与包含该信息的历史信息的区块进行链接。
  • 共识机制:解决去中心化模式下,各节点的时间同步、信息一致、有效管理和状态更新等问题。
  • 签名加密:采用私钥和公钥的非对称加密方式,对信息进行加密传输和解密阅读。
  • 在博弈论上的合理激励方案。

Libra的核心内容包括:

  1. 以安全和可扩展的区块链为基础技术。
  2. 其数字化货币以包含内在价值的资产储备为后盾。
  3. 整套系统由独立的Libra协会管理。

资产储备与稳定币

虽然Libra币(Libra Coin)是一种虚拟的加密数字化货币,但是与比特币(Bitcoin)这种原生货币不同,Libra币将全部使用真实资产储备(Libra 储备)作为担保,初步采用美元(U.S. dollar),欧元(euro),英镑(British pound),日元(yen)和新加坡元(Singapore dollar)作为支撑其价值的储备货币,每单位Libra币的价值将对应相应储备货币的价值,任何持有Libra币的个人或组织都能够根据汇率将自己持有的这种数字货币兑换为当地货币。虽然这些储备货币也存在汇率波动等现象,但这些储备货币汇率相对稳定,并且储备不唯一,很类似于一篮子货币(Basket of Currencies),这都保证了Libra币价值的相对稳定,避免出现类似比特币价格大幅波动、以及被炒作和投机的现象。初步看来,Libra币不具备被投机炒作的机会,因此Libra币也被称作稳定币。
抛开单纯的数字化虚拟,抛开单一的真实货币支撑其价值,又何尝不是一种去中心化的分布式的理念呢!

比特币(Bitcoin)的产生不是靠发行,而是靠矿工在记账即挖矿(mining)成功后,获得的奖励,由系统自动产生的,但是在2140年总量达到2100万枚比特币时,挖矿将不能产生新的比特币,因此比特币不会产生通货膨胀,在未来一定程度上会产生通货紧缩。
Libra币的储备金中,美元的初期占比可能达到50%,因此美国政府很大程度上将支持Facebook公司的这个计划,毕竟金融领域的数字化是必将到来的趋势,是每一个国家和政府不得不面对的问题,而50%的占比无疑仍将继续捍卫新时代美元的霸主地位。

我国央行也计划在2020年发行官方法定数字货币(Digital Currency Electronic Payment)。
2019年扎克伯格在美国国会有关Libra的听证会上,大篇幅地提出我国在数字金融领域的技术进步及数字化货币的快速推进将给美国带来巨大的竞争压力。


协会管理模式

Libra区块链和Libra储备由多元化的独立成员构成的Libra协会进行监管。这个监管实体是一家独立的非营利性会员制组织,总部位于瑞士日内瓦。发展初期,Libra协会的理事会由身为创始成员的全球企业、非营利组织、多边组织和学术机构等组成。所有决策都将通过理事会做出,重大政策或技术性决策需要三分之二的成员投票表决同意,这点与拜占庭容错(Byzantine Fault Tolerant)共识协议(下文详述)中所要求的绝对大多数成员相类似。从2019年6月至现今,其理事会的会员经历了一定程度的变动,有退出的也有新加入的,目前主要包括支付业的 PayU;技术和交易平台 Facebook/Calibra、Farfetch、Lyft、Spotify AB、Uber Technologies, Inc. ;电信业的 Iliad、Vodafone Group ,区块链业的Anchorage、Bison Trails、Coinbase, Inc.、Xapo Holdings Limited ;风险投资业的Andreessen Horowitz、Breakthrough Initiatives、Ribbit Capital、Thrive Capital、 Union Square Ventures 以及非营利组织、多边组织和学术机构Creative Destruction Lab、Kiva、Mercy Corps、Women’s World Banking 等。
一方面,理事会成员将在Libra发展初期作为交易的验证者节点,保证交易的正确和安全,这点将在下文的技术环节详细介绍。
一方面,Libra协会负责管理Libra储备的实体,铸造(mint)和销毁(burn)Libra币:当授权经销商投入法定资产从协会买入Libra币以完全支持新币时,Libra币才会被铸造;当授权经销商向协会卖出Libra币以换取抵押资产时,Libra币才会被销毁。

因此在发展初期,Libra还不是充分的去中心化,但其发展目标,及其在使用过程中技术的日趋成熟,将进一步提高其去中心化的程度。

比特币(Bitcoin)从一开始就是一个相对充分的去中心化结构,每个网络节点只要算力足够好(计算机性能优越),并且有意愿,就可以参与记账(挖矿),即参加整个系统的管理。
Libra币的储备理念、Libra协会的管理模式和初期发展方式,都反映出Facebook采用渐进式的折中发展思路。这与我国2019年证券市场推出注册制的科创板,而不是在已有创业板直接深化证券体制变革,这种增量式改革思路类似,面对新事物和既有利益的冲突,以及技术不完善、环境不成熟等因素,任何一项改革都必须循序渐进地展开。


区块链技术


Libra协议

Libra区块链(Libra Blockchain)是一个采用Libra协议维护的密码验证数据库,该数据库中存储了一个可编程资源(Resource)的账本。这种可编程资源初期就是Libra币(Libra Coin),预计后期也会类似以太坊(Ethereum)将包括分布式应用程序(Decentralized Application)。可编程资源(Resource)采用模块(Module)进行定义。
每位用户对自己账户(Account)内的资源,即Libra币进行交易、查询等操作。交易必须得到验证者(Validators)的集体验证,当多个验证者对该交易的验证达成共识时,该交易才最终被执行。交易信息作为一个区块添加到已有的历史账本中,形成了Libra区块链。Libra区块链中的所有数据将同时保存在这些验证者(即分布式网络中的多个节点)的数据库中。

逻辑数据模型 Logical Data Model

从算法设计的角度看,Libra区块链采用带有状态(时刻)标识i的数据模型来记录交易和账本等信息,该数据模型包括三个部分:

  • 交易(事务)Ti
  • 交易(事务)被执行后的输出结果Oi
  • 账本状态Si
当执行了Ti后会产生Oi,并且实现了Si-1到Si的变迁。

帐本状态Si

帐本状态Si指整个Libra系统在状态(时刻)i下的全部信息,例如每个账户所拥有的Libra币等(注意这里仅是逻辑模型,实际中,计算机网络的存储方式是不同的,下文详述)。
Libra中,账户采用非对称的加密(公钥/私钥)方式。账户的地址由公钥(好比银行账户的账户名)进行标识,采用私钥(好比银行账户的密码)进行操作。我们每个人可以拥有多个账户,且不需要实名身份验证。每个人通过私钥访问和操作自己的账户。由于区块链的特点,所有交易采用分布式的公开记账,你的账户信息可以被他人查阅(但是不能被操作),由于账户是匿名的,即使别人可以查阅账户信息,但并不知道这个账户是你的,因此完全不用担心你的隐私被泄露。

非对称加密是指:采用私钥加密的结果,可以用公钥进行解密;而采用公钥加密的结果,需要采用私钥进行加密。可以通过加密算法从私钥生成公钥,但是不能从公钥反向推导出私钥。
每个账户里存储着什么信息呢?这个被存储的信息称作资源(Resource),初期阶段就是Libra币,今后可能会包含分布式应用程序(DApp)。每个资源有不同类型,每个资源也有不同的取值大小,资源不能够被复制,仅能够被移动,例如同一枚Libra币不能够被复制到多个账户中,仅能在账户中来回转移(转账)(同样注意这里仅是逻辑模型,下文详述)。
由于有不同类型的资源(数字化货币、分布式应用程序等),需要在Libra中采用一个称作模块(Module)的数据体来定义:
+ 结构(Struct)的类型:分为资源(Resource)和非资源(Non-Resource)两类。
+ 操作步骤(Procedure):一组代码(程序),仅这组代码(程序)可以对其所定义的资源进行修改、删除等操作。
如果大家学习过面向对象的编程语言(Object-Oriented Language),例如C++,模块(Module)就好比类(Class), 结构(Struct)就好比对象(Object), 操作步骤(Procedure)就好比函数(Method),但是细节仍略有不同。

比特币(Bitcoin)区块链的资源就是比特币。
以太坊(Ethereum)则是一个分布式的状态机,其不仅根据共识规则处理数字化货币(一种数据存储状态)的交易支付,而且拓展到了通用目的的数据存储状态的转变,成为了构建在一个开放的、去中心化的、点对点的基础设施之上的Web应用程序,即分布式应用程序(DApp)的编程平台。分布式应用程序不单纯地部署在中心服务器上,而是运行在整个分布式网络中,避免了中心服务器死机造成的程序终止;其代码可以被任何人审查,任何企图修改程序内容的行为也被所有网络节点所监督和限制。

如何进行交易呢?

创世块

在开始正式的交易之前,回顾上文所述:当执行了Ti后会产生Oi,并且实现了Si-1到Si的变迁。任何一个交易都必须基于当前的账本状态Si而执行,而S0是什么呢?这如同比特币的“创世块”(Gensis),即第1块区块。在Libra系统中,定义了一种特殊的交易T0,在该交易中,定义了模块(Module),并采用该模块定义了一些资源(Resource),形成了S0,这个S0不是由交易形成的,而是构造(初始化)出来的。

交易费

采用Libra币进行支付时,付款人都要额外支付一笔交易费用,这是否与Libra降低支付手续费的初衷相矛盾呢?当然不是,首先该费用与当今的跨境手续费相比,一定是很低的;其次是必须收取的,因为在交易中验证者的验证和达成共识过程需要耗费大量的计算机算力,随着Libra应用的扩大,数据量的增大,对验证者的计算机性能的要求也会越来越高,因此需要经费维护这些系统。

实际计算中,这个手续费的计算包括两个方面:意愿单价(Gas Price)、最大意愿支付数量(Maximum Gas Amount)和实际总费用(Gas Cost)。其中意愿单价和最大意愿支付数量都由交易者确定,即你打算为这次交易付出的钱的数量,以及每枚钱的单价。实际中,同一时间段,每个验证者(Validator)会收到多个交易请求验证,此时每个验证者会选择意愿单价高的优先执行,并根据执行过程中的计算量(工作量)核算出实际总费用,并向交易的发起者收取。如果 实际总费用 大于 意愿单价 X 最大意愿支付数量,交易将被提前终止,交易宣告失败,但是此时的手续费还是要被收取的,即扣除 意愿单价 X 最大意愿支付数量 价值的Libra币,原因很简单,因为验证者已经为你付出了一定的计算。
收费目的除了维护验证者节点的计算能力外,还具有调节作用,促进交易者选择网络相对不繁忙的时候进行交易,因为此时你可以选择较低的意愿单价。

这与以太坊(Ethereum)完全相同。
但与比特币(Bitcoin)略有不同,虽然比特币也收取手续费,但不是强制的,手续费的收取是为了更加激励矿工记账(挖矿),参加记账的人越多,系统就更加安全,手续费仅在2140年记账(挖矿)奖励的方式结束之后,其作用才更加重要。

数字签名

在现实社会中,签名表示对消费交易的认可,而在数字化货币的转账过程中,数字签名就是只有货币转出人才能生成的一段防伪造的字符串。数字签名首先通过数字摘要技术把交易信息缩短成固定长度的字符串,然后用非对称加密技术(Asymmetric Encryption)对摘要进行加密,进而形成数字签名。

区块链中采用非对称加密算法,使用一对两把钥匙,即公钥与私钥。用户很容易创建私钥并导出对应的公钥,但是无法从公钥反算出对应的私钥。如果用公钥对数据进行加密,只有对应的私钥才能解密;如果用私钥对数据进行加密,只有对应的公钥才能解密。
付款人采用自己的私钥(下图中橙色钥匙图例)对交易信息(下图中淡棕色文档图例)进行加密,形成数字签名(下图中淡蓝色文档图例),并把交易信息和数字签名都发给收款人或验证人。交易信息包括付款人的账户地址、付款人私钥所对应的公钥、交易序列号等。收款方或验证人收到交易信息和数字签名后,通过公钥(下图中深红色钥匙图例)对数字签名解密,把解密后的交易信息(下图中白色文档图例)与收到的交易信息比较验证,确认交易是由付款人发起的,并且信息没有被篡改。

在比特币(Bitcoin)和以太坊(Ethereum)等区块链技术中,采用钱包(Wallet)来存储和管理私钥及该私钥对应的公钥。与传统观念不同,钱包存储的不是数字化货币的多少,即直接存储的不是账户的余额(上文逻辑模型中账户资源的多少)。比特币或以太币保存在区块链上的,而钱包(Wallet)是一种客户端应用程序,通过其遍历整个帐本(计算机网络节点),统计出:此刻指向此钱包中每个私钥对应的账户地址的数字化货币的总量,即 UTXO (Unspent Transaction Output)。简而言之,钱包是一个含有多个私钥(及其对应公钥)的钥匙圈。钱包也是一种去中心化的思路,改变了传统世界中,仅有你和中央银行可以看到自己账户的信息,转变为网络中的每个人都可以(通过公钥)看到账户余额,但只有自己才能(通过私钥)操作账户中的余额。如上文所述,由于账户地址是匿名的,即使账户信息是公开的,其他人也不知道账户的主人是谁。

交易步骤

现在开始正式的交易,当你想把自己某个账户中的一定数量的Libra币付给另外一个账户时,就需要发起一个交易:

  1. 这个交易首先被提交给多个验证者(Validators),即验证委员会(Quorum)。在这个验证委员会中,由每位验证者轮流担当领导(Leader)。
  2. 每一轮任期内,领导把你提交的交易及该交易所涉及的其历史交易验证信息,分发给所有的验证者。
  3. 每个验证者首先检查投票规则,并决定是否参与投票(对该交易进行验证)。
  4. 如果该验证者计划投票,则对该交易进行一次推测式(speculatively)的模拟执行(注意仅是模拟执行,不改变实际的帐本状态),并生成称作数据库验证器(Authenticator)的历史状态记录(下文详细介绍)。

  5. 交易的推测式模拟执行流程如下:
    i. 检查签名:验证人收到交易信息和数字签名后,通过公钥对数字签名解密,并把解密后的交易信息与收到的交易信息比较验证。
    ii. 预执行:
    a) 检查付款人账户公钥的HASH值的合理性;
    b) 核实付款人账户余额满足支付其期望的手续费,即 余额意愿单价 X 最大意愿支付数量;
    c) 核实该交易为该账户的最新交易申请,而不是历史交易,以避免重复执行.
    iii. 验证模块(Module)和脚本(Script)是否合规正确。
    iv. 发布模块。
    v. 运行脚本(Script):执行交易,如果执行成功,执行结果会被提交并参与共识表决(下文步骤5),如果账户余额不足支付实际的交易费用( 实际总费用 大于 意愿单价 X 最大意愿支付数量 )或超时等原因,将无法提交执行结果。
    vi. 后续处理:收取交易费用,并对该交易编号。
    注:虽然步骤4的ii、vi也耗费了算力,但这部分算力不计费。如果4的ii被执行,无论4的iii、iv、v是否执行,4的vi都将被执行。并且无论4的v成功与否,都将收取交易费用。
    脚本是内嵌在资源中的一个重要内容,运行脚本是交易执行的关键,也是数字化货币交易的关键,比特币的数据结构中包含脚本。其实数字化货币的交易并不是把货币传递来传递去,而是执行脚本中的代码,改变每枚数字化货币自身的一些信息,例如这枚数字化货币在什么时刻属于哪个账户地址,即属于谁。因此每次执行与自己账户有关的交易后,上文所说的钱包都需要遍历帐本,重新统计信息,并把账户余额展示给你。
    中本聪(Satoshi Nakamoto)设计脚本的初衷还是为了未来的拓展,即可以支持多种交易方式,例如托管(Escrow)、担保(Bonded Contract)、第三方仲裁(Third Party Arbitration)、多方签名(Multi Party Signature)等。在Libra的交易脚本中,其脚本预计也将被修改完善,使其将来不仅能处理货币的交易,还可以进行分布式应用程序的运行等等。
  6. 验证者对自己生成的数据库验证器进行签名,并把这个签名和数据库验证器发送给领导。
  7. 领导者收集验证者的签名后,在达成共识协议(下文详述)后,即绝大多数人都验证了交易的合理,将产生一个法定人数证明(Quorum Certificate),广播给所有验证人。
  8. 每位验证者根据接收到的法定人数证明,更新自己所存储的帐本历史,由于此时每个验证者存储的帐本历史一致,即大家都认可了这次交易,这才意味着交易被真正执行了,此时正式表明转账成功或失败,交易费用被扣除等现象。

至此一个交易被完全实现了,但有两个问题需要考虑:
  • 区块链去中心化的分布式网络及点对点的多方通讯中,没有一个中心来决定哪个点(验证者)的信息是否可以被视作真相,此外还存在通讯时间差(时钟不同步)以及个别节点被恶意更改等现象,如何让全部节点(验证者)对某个交易或某个状态达成共识?
  • 如何保证历史数据的正确,避免历史数据被篡改?例如重复消费等现象。

验证者如何达成共识呢?

当每个验证者按照上述步骤对交易进行推测式(speculatively)模拟执行后,并生成各自的数据库验证器(Authenticator),必须验证绝大多数人的验证器的一致性,这就是共识机制。
Libra系统采用Libra拜占庭容错共识协议(LibraBFT),其来源于解决拜占庭容错问题(Byzantine Fault Tolerant)并基于HotStuff协议。
拜占庭容错问题(Byzantine Fault Tolerant)来源一个虚构的故事:拜占庭帝国(东罗马帝国)的多支军队准备进攻一个城堡,每支军队都由自己的将军指挥,将军只能通过信使互相沟通。只有大部分军队同时进行攻击才能攻城获胜,如果不能形成集体攻击的局面,将造成各支军队的失败。因此每个将军必须决定共同的行动计划,但是其中一些将军可能是叛徒,试图阻止其他忠诚的将军采取共同行动。为了取得战斗的胜利,将军们必须采用一套算法来保证:

  • 所有忠诚的将军采取一致的行动计划。
  • 少数叛徒不能破坏忠诚将军的统一行动。
在区块链中: “将军”就是产生区块链的分布式网络中的各个节点,并通过网络进行通信。 “忠诚将军”的共同目标是攻占城堡——写入一个大家公认的区块记录。有效的相互通讯将是决定支持攻击的正确机会。对于忠诚的节点,他们有兴趣确保区块链的完整性,只接受正确的信息(新区块)。 “叛变将军”是任何试图伪造区块链的恶意节点,例如试图花费实际上自己并不拥有的数字货币等。
为了统一行动,选取一位将军作为暂时的发起者(发令将军),确定进攻时间,并把该时间告诉其他将军(普通将军)。普通将军得到发令将军的消息后,并不能冒然行事,因为如果某些普通将军没有收到发令将军的指令或是收到了指令却不能执行,仍然不能保证形成同时进攻的局面。因此普通将军之间也需要相互通讯,使每个普通将军都知道:其他普通将军都收到了发令将军的命令,并且确认自己可以执行。由于存在“叛变将军”,实际中可能有以下两种恶意情况:
  • 如果一些普通将军是“叛变将军”,那么他们向其他普通将军发送“自己是否收到发令将军的命令” 时,会说假话,例如不进攻,或是更改进攻时间,造成混乱的局面。
  • 如果发令将军自己就是“叛变将军”,那么他可能给一部分普通将军发布在A时间进攻,给另一部分将军发布在B时间进攻,破坏行动的一致性。
一系列的算法研究显示,当“叛变将军”少于将军总数的三分之一时,“忠诚将军”将可以做出正确的决定并达成一致,即 “叛变将军”的人数为f,则需要保证总人数为 3f+1
基于上述内容,Libra拜占庭容错共识协议(LibraBFT)采用了一种递归思路来保证:

  • Everyone knows X.
  • Everyone knows that everyone knows X.
  • Everyone knows that everyone knows everyone knows X.
  • 每位将军(节点)都知道命令。
  • 每位将军(节点)确认其他将军(节点)也知道命令。
  • 每位将军(节点)都确信:每位将军(节点)确认其他将军(节点)都知道命令。
回到上文所述的交易步骤中,从时间角度分成多个轮次,在每个轮次中都将接受用户新提交的交易,每个轮次也都将随机选取一位验证者作为领导:

第k轮:

领导把用户提交的交易及其包含的历史验证信息分发给所有验证者,验证者把自己的模拟计算结果(数据库验证器),采用签名加密的方式,发给第k+1轮的领导(新领导)

第k+1轮:

把第k轮中的所有数据库验证器生成一个法定人数证明(Quorum Certificate),该轮的领导把该法定人数证明及本轮用户新提交的交易进行分发,验证者把自己对这些新内容的数据库验证器签名后发给第k+2轮的领导

第k+2轮:

把第k+1轮中的所有数据库验证器生成一个新的法定人数证明,该轮的领导把法定人数证明及本轮用户新提交的交易进行分发,验证者把自己对这些新内容的数据库验证器签名后发给第k+3轮的领导,此时的Quorum Certificate包括:QC of k+1以及QC of QC of k。

第k+3轮:

把第k+2轮中的所有验证器再生成一个新的法定人数证明,该轮的领导把该法定人数证明及本轮用户新提交的交易进行分发,验证者把自己对这些新内容的数据库验证器签名后发给第k+4轮的领导,此时的Quorum Certificate包括:QC of k+2、QC of QC of k+1以及QC of QC of QC of k+1。

3轮进程保证了每位验证者(节点)都确信:每位验证者(节点)确认其他验证者(节点)都知道第k轮的交易,即验证结果一致,达成共识,可以从上文的交易步骤的6过渡到7,由于这个过程是一个递归(并行执行)的过程,即k+3轮承认的是历史上的第k轮的交易,但同时还验证了k+2的QC……以及进行本轮交易的分发等操作,保证了高效性。

此外还需要保证:
  • 在每轮的操作中,存在一个最大的时间限制(Pacemaker),即验证者必须在规定的时间内完成推测式模拟计算,并提交数据库验证器。这最大限度上解决了网络时钟不同步和信号传递滞后等现象。
  • 奖惩机制:例如采用消减验证者在Libra协会中股份的方式,惩罚违规的验证者;采用交易费以及Libra储备利息作为奖励,以鼓励更多的节点参与到验证者中来,验证者的增多将更好的实现大于3f+1的规则。
比特币(Bitcoin)采用了基于工作量证明(Proof of Work)的共识机制,通过增加算力来增加获得记账权的概率,想参加记账的节点首先需要解决一个非常复杂的计算问题(通过搜寻一个随机数,使其HASH值小于一个阈值),即挖矿。由于比特币采用了奖励机制,最先解决该复杂计算问题的人,将获得比特币(和交易费)的奖励,因此大家都争先计算这个复杂的问题,如果有恶意节点企图记入非法账目或篡改历史账目,他就必须和全网其他节点竞争。因此他的算力需要超过全网其他人的算力,即他的算力达到51%(全网51%的节点都被他黑了),但是实际中,他往往入不付出,即耗费了大量的资源,篡改的账户带来的收益不能超过他的资源消耗。也就是说他如果把干坏事的算力用来记账(挖矿),获得的比特币和交易费收入将远远超过其篡改的账户的收入。挖矿的真实目的是保护区块链的安全,保证对整个系统的控制权分布在参与者之间。
以太坊(Ethereum)采用的基于工作量证明(Proof of Work)的共识机制在比特币的基础上,依赖于维护一个大型的且需要频繁读取的数据结构,使人们更难开发出用于挖矿的专用集成电路(Application Specific Integrated Circuit),普通人借助消费级的图形处理器(GPU)就可以参与挖矿,避免了比特币系统中大多数挖矿算力集中在少数工业级计算机的拥有者的手中,使得独立矿工增多,去中心化更彻底。
PoW的容错性是50%,只有当超过一半的节点是诚实的,才保证区块链数据的有效性。但是PoW存在出块慢、吞吐量小、耗电大的局限。
Libra的发展计划中,拟在未来同时采用基于权益证明(Proof of State)的共识机制,即在每次验证中,验证者依据其提交的保证金(Libra币)的数量确定其投票权的权重,这个保证金就是权益。当某位验证者对某个区块(交易)投票赞成,但其他大多数验证者投票反对时(其他人的总权重比该验证者的大),该验证者将失去其保证金;而达成共识的验证者,将根据各自保证金的比例获得交易费的奖励。

基于工作量证明(Proof of Work)的惩罚是产生于区块链外部的(耗费计算机算力及电能)。
基于权益证明(Proof of State)的惩罚是产生于区块链内部的(失去作为保证金的Libra币)。
完整的交易流程被实现了,大家或许产生一个疑问,如何保证支付方(买家)支付了数字化货币,收款方(卖家)却不发货或不提供服务的现象?其实比特币设计的初衷是为了保护收款方(卖家)的利益。为了解决该问题,仍可以采用我们日常交易的中托管方式,采用三重签名,支付方、收款方和托管代理人各有一个签名,只有当签名大于两个时,才能完成交易。例如无争议时,支付方和收款方直接签名就完成了交易,如果存在争议,则需要托管代理人来判断,是签名同意支付方还是收款方。这与支付宝的付款机制很类似。但是支付宝的记账机制仍是存储在单一的中央银行系统中的,不是去中心化的。

如何保证历史数据的正确?

上述推测式的模拟计算将产生数据库验证器(Authenticator),顾名思义就是对历史帐本的一个检验;由于每个验证者都计算出了自己的数据库验证器;达成共识,则意味着绝大多数人的数据库验证器是一致的,因此交易被真正执行,并产生输出结果Oi,并把这个共识的数据库验证器作为历史记录。
正是这个数据库验证器表示了帐本逻辑数学模型的变化,代表了对帐本历史的约束承诺。于此同时,系统还将记录:

  • 交易的执行状态:成功、失败、异常等。
  • 交易费用。
  • 执行过程中的事件清单:上文整个交易过程中的1至7。
我们可以向验证者发起申请,验证者可以读取历史数据,从之前的某一个状态(时刻)开始,模拟执行其存储的所有交易,并把该交易执行后的模拟状态的信息,与当前状态(时刻)的实际信息进行比较,以验证当前状态(时刻)的帐本的正确性。

如何具体记录历史状态并验证历史信息呢?默克尔树(Merkle tree)是一种用于验证的数据结构,其树叶节点,存储一个HASH值,该HASH值由一个整型数字和其对应的字符串产生。树中的其他节点,则由其左下方节点和右下方节点的数值产生一个新的HASH值,作为其取值。

HASH值:采用哈希(HASH)加密算法对任意长度的输入,创建出的一个固定长度的数字序列。哈希函数的反向计算基本不可能,在当前阶段(量子计算普及前),具有很好的加密效果。
在Libra系统中,采用默克尔树(Merkle tree)的方式记录整个帐本历史。每片树叶就对应一个交易的相关信息,每片树叶存储即承诺了如下信息:
  • 签名的交易。
  • 采用一个验证器(一个稀疏默克尔子树Sparse Merkle Tree,隐含部分历史信息)存储交易后状态,即账户状态信息集。
  • 采用另一个验证器(另一个默克尔子树Merkle Tree)存储交易执行过程中的事件清单。
每一次新的交易被记录在默克尔树的最右侧的树叶上。根据默克尔树(Merkle tree)的特点,其根节点的HASH值就是对系统整个状态的验证。
验证者采用默克尔树这种验证器,实现了对大量数据进行约束承诺,可以侦测到现有数据的任何变化,并与历史信息和状态相关联,保障了所存储的交易数据的安全。当需要验证某一交易时,可以根据该交易对应的树叶节点的信息,计算其树叶节点的HASH值,并根据其两侧的HASH值,计算中间节点的HASH值,直到得出其根节点的HASH值,如果该计算值与已存储的根节点的HASH值不一致,或是中间某个点就已经出现偏差,则证明存在恶意的更改或交易。
随着历史信息的增多,需要采用稀疏默克尔子树(Sparse Merkle Tree)节约存储空间,隐藏历史久远的交易,即最左侧的一些树叶节点。但是由树叶节点生成的中间节点还是被保留的,并且这些中间节点的HASH值与树叶节点的信息有关,相当于保留了被隐藏的树叶节点的信息,因此仍可以实现历史验证。实际中采用了类似交易费的方式作为一种调节手段,为每笔交易预设一定的存储费,不同的存储费对应不同的存储时间和存储空间,较长时间的非隐藏状态和较大的存储空间需求需要较高的存储费,当超时后,历史交易信息会被隐藏。

在比特币的区块链技术,每个区块仅含有一个指针,指向其历史区块。当某个交易之后已经链接了足够多的区块后,为了节约存储空间时,也采用了被裁减的稀疏默克尔树记录交易信息。

综上:

  • 采用共识协议解决了分布式数据不一致及多个验证器不一致的问题,由于Libra协会的绝大多数成员为知名的组织,因此很大程度上可以保证其恶意成员的比例小于1/3。
  • 采用数据库验证器的数据结构保证了历史数据相互关联。
这两者相互作用保证了帐本信息被存储在分布式的网络中,任何企图修改帐本信息的恶意行为,必须从时间(修改帐本的所有历史信息)角度和空间(修改绝大多数的分布式数据库)角度同时出发,其可能性几乎为零,充分保证了数据的安全性。


以上仅是对Libra简单介绍,很多都是流程上的概括描述,实际的程序设计要更加复杂。区块链技术的更多细节,还请读者自行查阅深入了解,本文作者 Camellia的理解也一定程度上存在着偏差和主观色彩,也需要读者的指正和完善。
Libra白皮书的内容也仅是其初期构想,相信随着其应用的推广、不足的发现、升级的需要,例如扩大验证者(Validators)的数量、从单纯的Libra币扩展到分布式应用程序(DApp)等等,其技术或理念也将进一步发展。但无论如何,Facebook凭借现有的全球近27亿用户,一定会为Libra的推广带来优势。

数字化货币就像魔戒,玩的时间久了你就有了魔性;
区块链亦像神龙,对视时间长了你将似龙妈一样威力无边。
随着其他技术的进步,例如量子计算时代的到来,将轻易破解HASH值,并带来量子纠缠式的新加密方式,因此未来的区块链自身也必将不断地更新换代。学习区块链技术之余,我们不难发现:

  • 众人监督就是最严格的约束,当一切行为都被曝光在众目睽睽之下,我们才被无形的规矩所限制,这或许就是去中心化的优势。
  • 历史信息紧密相连、环环相扣,不仅与自己有关,也与历史过程中任何与你接触过的其他人相关,牵一发而动全身,如果说出一个谎言,都需要你编制另一个谎言去掩盖,如此反复,谎言将很快被揭穿。
  • 在缺乏可信赖仲裁者的情况下,采用数学、经济学以及社会学等知识来调解,解决去中心化下的安全机制。
  • 博弈论的巧妙应用,激发最大化自身利益的人性,调用市场激励的手段调节人们的行为处事。
  • ……

新的一年,是新的发展,区块链的世界仍然隐藏在新时代晨曦的迷雾之中,这艘幽灵之船仍在继续前行。没有人完全清楚未来的世界,这艘幽灵之船也一直在变换自己的模样。我们需要时刻洞察世界,掌握区块链技术,更要披沙沥金,借鉴其理念服务于我们的工作和生活,每一次新理念的介入,都可能赋予世界新的形态,而永葆赤子之心、勇于创新才是我们最关键的人生态度,想要找到世界的神秘,只能大胆走向世界的尽头。

If I only ever did things that I was 100% certain were going to work out for the best, I would never accomplish anything new and interesting.
by Satoshi Nakamoto
中本聪:“如果我仅去做 100% 有把握的事情,我将永远不能创新并享受其中的乐趣!”



References

  • The Libra Association Members, "An Introduction to Libra", October 13th, 2019.
  • The authors work at Calibra, "The Libra Blockchain", September 25th, 2019.
  • The LibraBFT Team, "State Machine Replication in the Libra Blockchain", 2019.
  • Phil Champagne, "The book of Satoshi", 2014.
  • Andreas M. Antonopoulos, Gavin Wood, "Mastering Ethereum", 2018.
  • Alec Ross, "The Industries of the future", 2016.